<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script type="text/javascript">
        var b1=3;
        console.log(window.b1,b1);
        console.log(b2(),b2);
        //需要注意的是，如果再window.onload关联的函数内执行window.a1的话，那么将无法查找到该值
        function b2()
        {

        }
        window.onload=function()
        {
            console.log(a1);
            console.log(a2);
            console.log(this);
            var a1=3;
            function a2()
            {

            }
            
        };
        function fn(c1)
        {
            //穿入实参fn(2,3);
            console.log("c1="+c1);
            //输出c1=2
            console.log("c2="+c2);
            //输出c2=undefined
            c3();
            //输出c3();
            console.log(this);
            //输出window对象
            console.log(arguments)
            //输出arguments伪数组(2,3)

            var c2=3;
            function c3()
            {
                console.log("c3()");
            }
        }
        fn(2,3);
        
    </script>
</head>
<body>
    <!--
        1.代码分类（位置）
        全局代码
        函数代码
        2.全局执行上下文
        在执行全局代码前将window确定为全局执行上下文
        对全局数据进行预处理
            var定义的全局变量==》undefined，添加为window的属性
            function声明的全局函数==》赋值（fun），添加为window的方法
            this==》赋值（window）
        开始执行全局代码
        3.函数执行上下文
        在调用函数，准备执行函数体之前，创建对应的函数执行上下文对象
        对局部数据进行预处理
            形参变量==》赋值（实参）==》田家玮执行上下文的属性
            arguments==》赋值（实参列表），添加为执行上下文的属性
            var定义的局部变量==》undefined，添加为执行上下文的属性
            function声明的函数==》赋值（fun），添加为执行上下文的方法
            this==》赋值（调用函数的对象）
        开始执行函数体代码
    -->
</body>
</html>